﻿using System.Data.Entity;
using System.Linq;
using System.Net;
using System.Web.Mvc;
using MSDAL;
using MSWeb.Implementation;
using PagedList;

namespace MSWeb.Controllers
{
    public class UczniowiesController : Controller
    {
        private readonly MSEntities _db = new MSEntities();

        // GET: Uczniowies
        [Authorize]
        public ActionResult Index(int? page)
        {
            int pageNumber = (page ?? 1);
            return View(_db.Uczniowie.OrderBy(i => i.IDUcznia)
                .ToPagedList(pageNumber, ApplicationSettings.PageSize));
        }


        [Authorize]
        public ActionResult Detale(int? id)
        {
            if (!id.HasValue)
            {
                TempData["Error"] = "Nieodnaleziono podanego rekordu";
                return RedirectToAction("Index");
            }
            else
            {
                if (_db.Uczniowie.Any(i => i.IDUcznia == id))
                {
                    Uczniowie uczniowie = _db.Uczniowie.First(i => i.IDUcznia == id);
                    return PartialView("_DetaleUczniowie", uczniowie);
                }
                else
                {
                    TempData["Error"] = "Nieodnaleziono podanego rekordu";
                    return RedirectToAction("Index");
                }
            }
        }

        [Authorize]
        public ActionResult Edycja(int? id)
        {
            if (!id.HasValue)
            {
                TempData["Error"] = "Nieodnaleziono podanego rekordu";
                return RedirectToAction("Index");
            }
            else
            {
                if (_db.Uczniowie.Any(i => i.IDUcznia == id))
                {
                    Uczniowie uczniowie = _db.Uczniowie.First(i => i.IDUcznia == id);
                    return PartialView("_EdycjaUczniowie", uczniowie);
                }
                else
                {
                    TempData["Error"] = "Nieodnaleziono podanego rekordu";
                    return RedirectToAction("Index");
                }
            }
        }

        [Authorize]
        public ActionResult Tworzenie()
        {
            return PartialView("_TworzenieUczniowie");
        }

        // GET: Uczniowies/Details/5
        [Authorize]
        public ActionResult Details(int? id)
        {
            if (id == null)
            {
                TempData["Error"] = "Nieodnaleziono podanego rekordu";
                return RedirectToAction("Index");
            }
            Uczniowie uczniowie = _db.Uczniowie.Find(id);
            if (uczniowie == null)
            {
                return HttpNotFound();
            }
            return View(uczniowie);
        }

        // GET: Uczniowies/Create
        [Authorize]
        public ActionResult Create()
        {
            return View();
        }

        // POST: Uczniowies/Create
        // To protect from overposting attacks, please enable the specific properties you want to bind to, for 
        // more details see http://go.microsoft.com/fwlink/?LinkId=317598.
        [HttpPost]
        [Authorize]
        [ValidateAntiForgeryToken]
        public ActionResult Create(Uczniowie uczniowie)
        {
            uczniowie.CzyUsunieta = false;
            _db.Uczniowie.Add(uczniowie);
            _db.SaveChanges();
            return RedirectToAction("Index");
        }

        // GET: Uczniowies/Edit/5
        [Authorize]
        public ActionResult Edit(int? id)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            var uczniowie = _db.Uczniowie.Find(id);
            if (uczniowie == null)
            {
                return HttpNotFound();
            }
            return View(uczniowie);
        }

        // POST: Uczniowies/Edit/5
        // To protect from overposting attacks, please enable the specific properties you want to bind to, for 
        // more details see http://go.microsoft.com/fwlink/?LinkId=317598.
        [HttpPost]
        [Authorize]
        [ValidateAntiForgeryToken]
        public ActionResult Edit(Uczniowie uczniowie)
        {
            if (ModelState.IsValid)
            {
                _db.Entry(uczniowie).State = EntityState.Modified;
                _db.SaveChanges();
                return RedirectToAction("Index");
            }
            return View(uczniowie);
        }

        // GET: Uczniowies/Delete/5
        [Authorize]
        public ActionResult Delete(int? id)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            var uczniowie = _db.Uczniowie.Find(id);
            if (uczniowie == null)
            {
                return HttpNotFound();
            }
            return View(uczniowie);
        }

        // POST: Uczniowies/Delete/5
        [HttpPost, ActionName("Delete")]
        [Authorize]
        [ValidateAntiForgeryToken]
        public ActionResult DeleteConfirmed(int id)
        {
            Uczniowie uczniowie = _db.Uczniowie.Find(id);
            _db.Uczniowie.Remove(uczniowie);
            _db.SaveChanges();
            return RedirectToAction("Index");
        }

        [Authorize]
        public ActionResult GetSchedulesForStudent(int id)
        {
            var result = _db
                .PowtorzeniaLekcji
                .Where(i => i.IDUcznia == id)
                .ToList();
            return PartialView("_SchedulesForStudent", result);
        }

        protected override void Dispose(bool disposing)
        {
            if (disposing)
            {
                _db.Dispose();
            }
            base.Dispose(disposing);
        }
    }
}
